/***********************************************************************************************************************
 * ############################################# Application AdewebLite #############################################
 * AdewebLite Android est une application permettant de consulter des emplois du temps fournis par l'université UHP
 * avec ou sans connexion internet (informations gardées en mémoire à chaque synchronisation). Et utilisant la web
 * API ADE pour collecter les données.
 * @author Andrianjafintrimo Victor, Zanette Sébastien
 * 
 * Basée sur l'application du même nom, utilisant le flux RSS (données à traiter), de :
 * @author Schnell Michaël, Zanette Sébastien
 * **********************************************************************************************************************
 */

package fr.ul.ade.prime.ui.util;

import java.util.List;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import fr.ul.ade.R;
import fr.ul.ade.prime.model.Project;
import fr.ul.ade.prime.util.Lists;

/**
 * Champ 'ProjectId' du formulaire de création/modification d'un emploi du temps.
 * @author Seb
 */
public class ScheduleProject extends ParameterType {

	public static final String FIELD_ID = "project" ; //$NON-NLS-1$

	private Project project ;
	private Project[] allProjects ;
	private LayoutInflater inflater;

	private Spinner projectsSpinner ;
	private List<String> projectNames ;
	private List<Integer> projectIds ;

	/**
	 * Constructeur.
	 * @param inflater
	 * @param project 
	 */
	public ScheduleProject(LayoutInflater inflater, Project project, Project[] projects) {
		super(FIELD_ID) ;
		this.inflater = inflater ;
		this.project = project ;
		this.allProjects = projects ;
	}

	/**
	 * Fixe le champ ProjetId à la valeur donnée en paramètre.
	 * @param projectId 
	 */
	public void setProject(Project projectId) {
		this.project = projectId;
	}

	/**
	 * Retourne l'entier associé au projet choisi par l'utilisateur.
	 * @param view Vue
	 * @return entier associé au project choisi par l'utilisateur
	 */
	@Override
	public Project getValue(View view) {
		return this.project ;
	}

	/**
	 * Retourne la vue du champ 'ProjectId' (Boutons).
	 * @param convertView vue du champ dans le formulaire de création/modification
	 * @param parent Vue parente
	 * @return vue du champ 'ProjectId'
	 */
	@Override
	public View getView(View convertView, ViewGroup parent) {
		View v = this.inflater.inflate(R.layout.type_schedule_project_id, null) ;
		this.init() ;
		this.initView(v) ;
		return v ;
	} 
	
	private void init() {
		this.projectIds = Lists.newArrayList() ;
		this.projectNames = Lists.newArrayList() ;
		for(Project p : this.allProjects) {
			this.projectNames.add(p.getProjectName()) ;
			this.projectIds.add(Integer.valueOf(p.getAdeProjectId())) ;
		}
	}

	/**
	 * Initialise la vue.
	 * @param view 
	 */
	public void initView(View view) {
		this.projectsSpinner = (Spinner) view.findViewById(R.id.spinner) ;

		ArrayAdapter<String> adapter = new ArrayAdapter<String>(
				view.getContext(), android.R.layout.simple_spinner_item, this.projectNames) ;
		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) ;
		this.projectsSpinner.setAdapter(adapter) ;
		if (this.project != null) {
			this.projectsSpinner.setSelection(this.getPositionFromProjectId(this.project.getAdeProjectId())) ;
		}
	}

	private int getPositionFromProjectId(int adeProjectId) {
		return this.projectIds.indexOf(Integer.valueOf(adeProjectId)) ;
	}

//	private Object getProjectWithPosition(int selectedItemPosition) {
//		return this.projectIds.get(selectedItemPosition) ;
//	}

}
